package com.cn.zpark;

import com.cn.zpark.utils.DruidUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * 登录流程：
 *      1、用户在登录页面输入用户名和密码，点击提交
 *      2、后台servlet获取用户提交的表单数据
 *      3、拿着获取到的用户名前往数据库查询数据
 *      4、如果查询有结果，则比较密码是否正确，否则提示登录失败
 *      5、如果密码正确，则显示登录成功，否则登录失败
 */
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求缓冲区编码方式
        request.setCharacterEncoding("utf-8");
        // 设置响应格式及编码
        response.setContentType("text/html;charset=utf-8");
        // 获取写出流对象
        PrintWriter writer = response.getWriter();


        // 获取表单提交数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println(username + " : " + password);

        // 拿着获取到的用户名前往数据库查询数据
        // 准备连接数据库的相关信息
        Connection conn = null;
        PreparedStatement stat = null;
        ResultSet res = null;
        String message = "登录失败，用户名或者密码错误";

        // 如果查询有结果，则比较密码是否正确，否则提示登录失败
        try {
            // 获取数据库连接
            conn = DruidUtils.getConn();
            // 创建sql
            String sql = "select id, uname, pwd from tab1 where uname=?";
            // 创建预编译sql对象
            stat = conn.prepareStatement(sql);
            // 替换占位符
            stat.setString(1, username);
            // 执行sql
            res = stat.executeQuery();
            // 判断是否有数据
            while (res.next()) {
                // 有数据
                String uname = res.getString("uname");
                String pwd = res.getString("pwd");

                // 如果密码正确，则显示登录成功，否则登录失败
                if(pwd.equals(password)){
                    message = "<h1>登录成功</h1>";
                }

            }

            writer.println(message);

        } catch(Exception e) {
            e.printStackTrace();
            System.out.println("数据库查询数据出了问题");
            response.sendError(10086, "服务器发生了不可预知的错误");
        } finally {
            //关闭资源
            DruidUtils.close(res, stat, conn);
            writer.close();
        }



    }
}
